﻿/*
 * Created by SharpDevelop.
 * User: Usuario
 * Date: 10/11/2011
 * Time: 12:04 a.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using Business_Entity;

namespace DAOFactory
{
	/// <summary>
	/// Description of DAOMovimiento.
	/// </summary>
	public class DAOMovimiento
	{
		public DAOMovimiento()
		{
		}
		
		public int agregarMovimiento(int codProd, int codTienda, int codTipoMov, int cant){
			String cmdSQL;
			int cod=0;
			DAOProductoTienda pTienda = new DAOProductoTienda();
			int r = pTienda.verificaExistenciaProductoTienda(codTienda, codProd);
			if(r==0){
				pTienda.addProductoTienda(codTienda, codProd, cant);
			}
			
            SqlConnection conn = ConnectionManager.getConnection();
			cmdSQL = "INSERT INTO MOVIMIENTO (IDPRODUCTO, IDTIENDA, IDTIPOMOV, CANTIDAD, FECHA) VALUES " +
				"(" + codProd + ", " + codTienda + ", " + codTipoMov + ", " + cant + ", GETDATE());";
			SqlCommand command = new SqlCommand(cmdSQL, conn);
				
			try{
				command.ExecuteNonQuery();	
				return 1;
			}
			catch{
				//Si devuelde null es poruqe hubo un error al cargar la lista de pedidos
				return 0;
			}
		}
		
		public List<BEMovimientoProducto> reporteMovFiorella(List<BEProducto> prod, List<BETienda> tienda, String fIni, String fFin){
			String cmdSQL;
			SqlDataReader res = null;
			BEMovimientoProducto mov = null;
			List<BEMovimientoProducto> lista;
			SqlConnection conn = ConnectionManager.getConnection();
			
			cmdSQL = "SELECT M.*, P.NOMBRE, T.nombre, TM.Descripcion FROM MOVIMIENTO M, PRODUCTO P, TIENDA T, TIPOMOVIMIENTO TM " +
				"WHERE M.IDPRODUCTO=P.IDPRODUCTO AND M.IDTIENDA=T.idTienda AND M.idTipoMov=TM.idTipoMov";
			
			if(prod.Count!=0){
				cmdSQL = cmdSQL + " AND M.IDPRODUCTO IN (" + prod[0].Codigo;
				for(int i=1; i<prod.Count; i++){
					cmdSQL = cmdSQL + ", " + prod[i].Codigo;
				}
				cmdSQL = cmdSQL + ")";
			}
			
			if(tienda.Count!=0){
				cmdSQL = cmdSQL + " AND M.IDTIENDA IN (" + tienda[0].Id;
				for(int i=1; i<tienda.Count; i++){
					cmdSQL = cmdSQL + ", " + tienda[i].Id;
				}
				cmdSQL = cmdSQL + ")";
			}
			if(fIni!=""){
				if(fFin!=""){
					cmdSQL = cmdSQL + " AND DATEADD(DAY, DATEDIFF(DAY, 0, M.FECHA), 0) BETWEEN '" + fIni + "' AND '" + fIni + "'";
				}
				else{
					cmdSQL = cmdSQL + " AND DATEADD(DAY, DATEDIFF(DAY, 0, M.FECHA), 0) >= '" + fIni + "'";
				}
			}
			else{
				if(fFin!=""){
					cmdSQL = cmdSQL + " AND DATEADD(DAY, DATEDIFF(DAY, 0, M.FECHA), 0) <= '" + fFin + "'";
				}
			}
			cmdSQL = cmdSQL + " ORDER BY M.FECHA, M.IDTIENDA, M.IDPRODUCTO;";
			
			lista = new List<BEMovimientoProducto>();
			try{
				SqlCommand command =  new SqlCommand(cmdSQL, conn);
				res = command.ExecuteReader();
				BETienda bTienda;
				BEProducto bProd;
				BETipoMovimientoProducto tipo;
				BEUnidadProducto u = new BEUnidadProducto();
				BETipoProducto y = new BETipoProducto(1);
				while(res.Read()){
					int codProducto = Int32.Parse(res[1].ToString());
					int codTi = Int32.Parse(res[2].ToString());
					int tipMov = Int32.Parse(res[3].ToString());
					int cant = Int32.Parse(res[4].ToString());
					DateTime fec = DateTime.Parse(res[5].ToString());
					String nomProd = res[6].ToString();
					String nomTien = res[7].ToString();
					String nomMov = res[8].ToString();
					bTienda = new BETienda();
					bTienda.Nombre = nomTien;
					bTienda.Id = codTi;
					bProd = new BEProducto(codProducto, nomProd, "", u, y);
					tipo = new BETipoMovimientoProducto(tipMov, nomMov);
					mov = new BEMovimientoProducto(bTienda, bProd, fec, cant, tipo);
					lista.Add(mov);
				}
				res.Close();
			}
			catch{
				res.Close();
			}
			return lista;
		}
	}
}
